-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Dev/use vllm #1053
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dev/use vllm #1053
Conversation
- 新增基于队列和线程的异步推理机制 - 优化同步推理接口,使用新机制实现
- 删除了 LLM 类中的 async_llm_inference 方法 - 该方法尚未使用,且再在loop_thread之外运行后会导致 vllm 崩溃,因此将其移除
- 新增 speed_test.ipynb 文件,用于测试 CosyVoice2模型的性能 - 包含测试环境配置、默认情况下的使用示例、使用 vllm 加速 LLM 推理的步骤
- 移除任务队列和单任务处理限制 - 使用 asyncio.run_coroutine_threadsafe() 在后台线程中运行推理任务
@qi-hua 你好,感谢你的分享,我尝试你这个分支,想问下需要多少显存可以呢。gpu_memory_utilization在代码的哪块加呢 |
vllm需要大概3-4G的显存就可以了,gpu_memory_utilization的设置目前放在了cosyvoice/llm/llm_vllm.py:39 ENGINE_ARGS中,还没有暴露设置的位置,需要手动修改。 |
- 在 Frontend 中,恢复原本逐个生成文本令牌 - 在 Model 类中,移除了不必要的日志信息和断言,简化了文本令牌的处理流程
哦哦,感谢感谢,另外,我发现一个问题是,我按下面的测试脚本测试出现了下面的错误, |
我不了解这两种方式的区别,但默认会启动很多的进程。 |
@lyblsgo 麻烦帮忙看一下这个代码 |
@qi-hua dev/use_vllm 按照speed_test.ipynb加载vllm模型还跑不通。async_cosyvoice可以跑通。 |
我没改代码
if name == 'main': |
这样可以跑起来了,这个分支还得优化下,跟main分支代码有点差别
2025-03-13 16:12:48,748 INFO synthesis text 收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。 inference_zero_shot + bistream instruct2 usage |
请问一下vllm推理时 prompt text和text最后都加了6564是什么原因 |
为了区分 文字token_id(所有的文字token增大6564,在vllm中计算时再减去6564) 与 语音token_id(输入的参考音频的token、llm模型推理输出的token),以便在vllm模型中将其转为正确的embedding 具体代码见 vllm_use_cosyvoice2_model.CosyVoice2Model.get_input_embeddings |
@qi-hua hi,咨询个问题,咱们这个分支多线程并发后的耗时会上升吗,看起来多线程并发的耗时卡点会在flow模块trt推理上的进程锁。
|
|
@qi-hua 您好 麻烦请教一下哈
|
CosyVoice2 使用vllm加速llm推理推理的方法1. CosyVoice2实例化时添加 use_vllm=True 参数2. 确保CosyVoice2在完成主线程的引导后再进行实例化在启用vllm引擎的时候, 因vllm使用了多进程、需在主线程启动,所以需要确保CosyVoice2在完成主线程的引导后再进行实例化,需要对原先的CosyVoice2初始化代码进行适当修改。 比如,之前的代码是: from cosyvoice.cli.cosyvoice import CosyVoice2
cosyvoice = CosyVoice2('pretrained_models/CosyVoice2-0.5B', load_jit=True, load_trt=True, fp16=True, use_vllm=True)
def inference():
prompt_speech_16k = load_wav('./asset/zero_shot_prompt.wav', 16000)
for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k, stream=False)):
torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)
if __name__ == '__main__':
inference() 上面代码的启动时会报错,原因在于初始化CosyVoice2时,vllm在内部将启动多进程,而此时主进程还未完成引导,从而触发错误。 from cosyvoice.cli.cosyvoice import CosyVoice2
cosyvoice: CosyVoice2|None = None
def inference():
prompt_speech_16k = load_wav('./asset/zero_shot_prompt.wav', 16000)
for i, j in enumerate(cosyvoice.inference_zero_shot('收到好友从远方寄来的生日礼物,那份意外的惊喜与深深的祝福让我心中充满了甜蜜的快乐,笑容如花儿般绽放。', '希望你以后能够做的比我还好呦。', prompt_speech_16k, stream=False)):
torchaudio.save('zero_shot_{}.wav'.format(i), j['tts_speech'], cosyvoice.sample_rate)
def main():
global cosyvoice
cosyvoice = CosyVoice2('pretrained_models/CosyVoice2-0.5B', load_jit=True, load_trt=True, fp16=True, use_vllm=True)
# 其他推理任务
inference()
if __name__ == '__main__':
main() |
非常感谢@qi-hua大佬的回复哈,受教了~~,通过这种方式可以成功运行。 这个是调用服务的日志,感觉是启动2个worker的时候,并没有正确的初始化CosyVoice2,导致找不到。不知道如果想启动两个worker应该怎么操作呢,另外,这种启动多个worker的方式是不是可以支持更多的并发呀,还麻烦帮忙解答一下哈。 INFO 03-21 03:04:40 gpu_model_runner.py:1060] Loading model weights took 0.9532 GB 2、另外一个问题是,目前推理的时候,llm模型用了vllm进行加速,并且也是支持并发的,但是后面的flow这些模型,好像不能支持并发,是不是也可以多实例化几个flow模型出来,然后来处理vllm并发输出后的llm结果呢,不知道这种方式是不是可以把整个推理流程的并发数再提上来一些呀,个人并不太懂异步和并发的一些东西哈,如果这个思路可行,不知道您这边有没有计划再优化一个版本出来呢,目前vllm加速的效果还是非常明显了,再次感谢您对开源社区的贡献哈~~ |
hi,看你提到的vllm支持并发,我测下来单个vllm实例,并发请求时耗时是会增加的,想咨询下你是怎么使用的 |
1、首先原始的没有用vllm的版本,应该是不支持并发的,一个请求需要5s的话,并发5个请求过去,就需要25s左右了。如下: This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Benchmarking 10.77.16.155 (be patient).....done Server Software: uvicorn Document Path: /test Concurrency Level: 1 Connection Times (ms) 2)ab -n 5 -c 5 10.77.16.155:50000/test Benchmarking 10.77.16.155 (be patient).....done Server Software: uvicorn Document Path: /test Concurrency Level: 5 Connection Times (ms) Percentage of the requests served within a certain time (ms) 2、用了vllm的版本再运行的时候,vllm可以对推理里面的千问llm进行加速(这个也是推理的大头),但对后面的flow等推理没有处理,但整体对推理加速还是比较明显的,但个请求的处理时长从4-5s降到了1点几秒,5个请求同时发过去,服务端处理时长也不是线性增加的,应该是vllm的并发再出来,但还是会比单个请求的时间长一些,应该是flow那边的模型推理没有并行能力,vllm推理完了之后,可能需要排队flow那边一个一个来处理,所以时间有所增加一些。 3)ab -n 1 -c 1 10.77.16.155:50000/test Benchmarking 10.77.16.155 (be patient).....done Server Software: uvicorn Document Path: /test Concurrency Level: 1 Connection Times (ms) 4)ab -n 5 -c 5 10.77.16.155:50000/test This is ApacheBench, Version 2.3 <$Revision: 1879490 $> Benchmarking 10.77.16.155 (be patient).....done Server Software: uvicorn Document Path: /test Concurrency Level: 5 Connection Times (ms) Percentage of the requests served within a certain time (ms) |
这个代码合并到主分支了没有,或者在那个分支上可以找到代码 |
dev/Comet 根本跑不起来啊 |
你好 我在使用这个分支时,没有跑起来。 INFO 04-22 17:30:02 gpu_model_runner.py:1060] Loading model weights took 0.9532 GB [rank0]: Traceback (most recent call last): |
目前使用 vllm 的 AsyncLLMEngine 加速推理
增加了 cosyvoice.llm.llm_vllm.VllmQwen2LM ,其他文件主要是简单修改;
VllmQwen2LM目前支持多任务推理,并发需对原接口适当修改;
使用trt的情况下,加速后效果 rtf 能够达到 0.1-0.15。